public: void PipeCalcMain( System::Drawing::Printing::PrintPageEventArgs^ e )
{
Int32 i; Int32 j; Int32 n; Int32 m;
Int32 N1;
float D1; float D2; float Dmax; float Dref;
float X; float Y; float R; float R1;
float X0; float Y0; float X1; float Y1;
float Th; float Th1; float Th2; float Th3; float Th4; float Th5;
float Pai; float Pai2;
Pai = 4.0F * atan(1.0F);
Pai2 = Pai + Pai;
Th = 0.0; Th1 = 0.0; Th2 = 0.0; Th3 = 0.0; Th4 = 0.0; Th5 = 0.0;
D1 = 0.0; D2 = 0.0; Dmax = 0.0; Dref = 0.0;
X0 = 150.0; Y0 = 100.0; X1 = X0; Y1 = Y0; R1 = 0.0;
m = 0; n = 1;
for ( i = 0; i < DataMax; i++ )
{
D2 = D1;
Th2 = Th1;
D1 = InData[i].D;
N1 = InData[i].N;
R = D1 * 0.5F;
if ( n == 1 ) { R1 = R; D2 = D1; n = 2; }
Th4 = asin( 0.5F * R / ( R1 + R ) );
if ( Th1 > 0 ) Th1 = Th3 + 2 * Th4;
if ( ( ( Th3 + 4 * Th4 ) <= ( Pai2 - 2 * Th5 ) ) && ( ( R1 + D1 ) < Dmax ) ) Th1 = Th2 - 2 * Th + 2 * Th4;
for ( j = 1; j <= N1; j++ )
{
if ( i == 0 && j == 1 )
{
X = X0;
Y = Y0;
R1 = R;
Dmax = D1;
if ( DspPrtFlg ) CircleDraw( X, Y , R ); else CirclePrint( X, Y, R, e );
}
else
{
X1 = ( R1 + R ) * cos( Th1 );
Y1 = ( R1 + R ) * sin( Th1 );
X = X1 + X0;
Y = Y1 + Y0;
if ( DspPrtFlg ) CircleDraw( X, Y , R ); else CirclePrint( X, Y, R, e );
Th = asin( 0.5F * R / ( R1 + R ) );
Th3 = Th1 + 2 * Th;
Th1 += 4 * Th;
if ( i == 0 && j == 2 ) Dmax = R1 + D1;
if ( InData[0].N == 1 && i == 1 ) Dmax = R1 + D1;
if ( ( Th1 + 4 * Th ) > Pai2 )
{
if ( i == m ) Dref = Dmax - 0.5F * D1; else Dref = Dmax - 0.5F * D2;
if ( ( R1 + D1 + R ) < Dref )
{
R1 += D1; Th1 = Th2;
}
else
{
Th1 = 0.0; Th2 = Th1; Th3 = Th2; Th5 = Th;
R1 = Dmax; Dmax += D1;
}
}
}
m = i;
}
}
}